home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / util / blank / B_Decay.lha / B_Decay / source / Decay.c
C/C++ Source or Header  |  1996-10-25  |  3KB  |  152 lines

  1. ;/*
  2. sc RESOPT IGNORE=73 DATA=FAR CODE=FAR NMINC UCHAR CONSTLIB STREQ STRMERGE NOSTKCHK NOSTDIO OPTIMIZE OPTTIME OPTPEEP Decay.c
  3. slink from LIB:c.o Decay.o to hd2:System/Blankers/BServer/Clients/Decay LIB LIB:sc.lib LIB:amiga.lib /lib/client.lib SC SD NOICONS STRIPDEBUG
  4. delete Decay.o
  5. quit
  6.  
  7.  Decay 0.2  (Client for BServer)
  8.  
  9.     by Ali Graham   (based on code by Stefano Reksten of 3AM)
  10.  
  11. */
  12.  
  13. #include <exec/types.h>
  14. #include <exec/execbase.h>
  15. #include <exec/memory.h>
  16. #include <intuition/intuition.h>
  17. #include <intuition/intuitionbase.h>
  18.  
  19. #include <proto/exec.h>
  20. #include <proto/intuition.h>
  21. #include <proto/graphics.h>
  22. #include <proto/utility.h>
  23. #include <proto/icon.h>
  24. #include <clib/alib_protos.h>
  25. #include <string.h>
  26.  
  27. #include <stdlib.h>
  28. #include <time.h>
  29.  
  30. #include "/include/client.h"
  31.  
  32. #define min(a,b) ((a)<=(b)?(a):(b))
  33.  
  34. char *ver = "$VER: Decay 0.2 "__AMIGADATE__;
  35.  
  36. struct Screen *scr;
  37. struct RastPort *rport;
  38. UWORD swidth, sheight, swidth_m, sheight_m, swidth_mm;
  39.  
  40. int maxheight, maxwidth, minheight, minwidth, rate;
  41.  
  42. struct IntuitionBase *IntuitionBase;
  43. struct GfxBase *GfxBase;
  44.  
  45. struct DisplayIDInformation *dinfo;
  46.  
  47. UWORD bounds( UWORD a, UWORD min, UWORD max )
  48. {
  49.  
  50.     if (a<min) return min;
  51.     if (a>max) return max;
  52.  
  53.     return a;
  54.  
  55. }
  56.  
  57.  
  58. UWORD power( UWORD a, UWORD b)
  59. {
  60.  
  61.     UWORD sum=a, count;
  62.  
  63.     if (a==0) return 0;
  64.     if (a==1) return 1;
  65.  
  66.     if (b==0) return 1;
  67.  
  68.     for ( count=0; count<b; count++ )
  69.         {
  70.         sum = sum * a;
  71.         }
  72.  
  73.     return sum;
  74.  
  75. }
  76.  
  77. void Decay( void )
  78. {
  79. UWORD swidth, sheight, x, y, z;
  80.  
  81. if ( scr = CloneFrontmostScreen( GETBRIGHTNESS(dinfo) ) )
  82.     {
  83.  
  84.     register struct RastPort *rp = &(scr->RastPort);
  85.  
  86.     swidth = scr->Width;
  87.     sheight = scr->Height;
  88.  
  89.     SetAPen( rp, DarkestColorIndex( scr ));
  90.  
  91.     SpritesOff();
  92.  
  93.     while( STILL_BLANKING )
  94.             {
  95.  
  96.             WaitTOF();
  97.  
  98.             for (z = 0; z<rate; z++)
  99.                 {
  100.                     x = RangeRand( swidth );
  101.                     y = RangeRand( sheight );
  102.  
  103.                     Move( rp, x, y ); Draw( rp, x, y );
  104.                 }
  105.  
  106.             }
  107.  
  108.     SpritesOn();
  109.  
  110.     CloseScreen( scr );
  111.     }
  112. else
  113.     SendClientMsg( ACTION_FAILED );
  114. }
  115.  
  116. void InterpretArgs( void )
  117. {
  118.  
  119.     if ( !GetArgInt( dinfo->di_Args, "RATE", &rate ) )
  120.         rate = 100;
  121.  
  122.     rate = bounds( rate, 1, 1000);
  123.  
  124. }
  125.  
  126. void main( void )
  127. {
  128.  
  129. long t;
  130.  
  131. if ( IntuitionBase = (struct IntuitionBase *)OpenLibrary( "intuition.library", 37L ) )
  132.         {
  133.         if ( GfxBase = (struct GfxBase *)OpenLibrary( "graphics.library", 37L ) )
  134.                 {
  135.                 if ( dinfo = OpenCommunication() )
  136.                         {
  137.  
  138.                         InterpretArgs();
  139.  
  140.                         /* Set up the randomizer-seed */
  141.                         srand(time(&t));
  142.  
  143.                         Decay();
  144.  
  145.                         CloseCommunication( dinfo );
  146.                         }
  147.                 CloseLibrary( (struct Library *)GfxBase );
  148.                 }
  149.         CloseLibrary( (struct Library *)IntuitionBase );
  150.         }
  151. }
  152.